#include <signal.h>
#include <unistd.h>

#include <cstdio>
// 当一个信号的信号处理函数执行时，又接收到了该类型的信号，该信号会
// 自动被储存而不会中断信号处理函数的执行，直到信号处理函数执行完毕
// 再重新调用相应的处理函数。
// 但是， 如果在信号处理函数执行时，收到了其它类型的信号，该函数的执行就会被中断
//
// 另外，两个信号同时产生，系统并不保证进程接收它们的次序。
//
// 以上两个缺点，影响了信号作为进程通信手段的可靠性，因为一个进程不能保证它发出的信号不
// 被丢失。
//
void interrupt(int sig) {
    printf("Interrupt called\n");
    sleep(3);
    printf("Interrupt Func Ended.\n");
}

void catchquit(int sig) {
    printf("Quit called\n");
    sleep(3);
    printf("Quit ended.\n");
}

int main() {
    signal(SIGINT, interrupt);
    signal(SIGQUIT, catchquit);
    printf("Interrupt set for SIGINT \n");
    sleep(10);
    printf("Program NORMAL ended.\n");
    return 0;
}
